home *** CD-ROM | disk | FTP | other *** search
- #
- # ksh-compat -- functions and aliases to provide the beginnings of a ksh
- # environment for bash.
- #
- # Chet Ramey
- # chet@ins.CWRU.Edu
- #
- #
- # These are definitions for the ksh compiled-in `exported aliases'. There
- # are others, but we already have substitutes for them: "history", "type",
- # and "hash".
- #
- alias r="fc -e -"
- alias functions="typeset -f"
- alias integer="typeset -i"
- alias nohup="nohup "
- alias true=":"
- alias false="let 0"
-
- #
- # An almost-ksh compatible `whence' command. This is as hairy as it is
- # because of the desire to exactly mimic ksh (whose behavior was determined
- # empirically).
- #
- # This depends somewhat on knowing the format of the output of the bash
- # `builtin type' command.
- #
-
- whence ()
- {
- local vflag
- local path
-
- vflag=
- path=
-
- if [ "$#" = "0" ]; then
- echo "whence: argument expected"
- return 1
- fi
-
- case "$1" in
- -v) vflag=1
- shift 1
- ;;
- -*) echo "whence: bad option: $1"
- return 1
- ;;
- *) ;;
- esac
-
- if [ "$#" = "0" ]; then
- echo "whence: bad argument count"
- return 1
- fi
-
- for cmd; do
- if [ "$vflag" ]; then
- echo $(builtin type $cmd | sed 1q)
- else
- path=$(builtin type -path $cmd)
-
- if [ "$path" ]; then
- echo $path
- else
- case "$cmd" in
- /*) echo ""
- ;;
- *)
- case "$(builtin type -type $cmd)" in
- "") echo ""
- ;;
- *) echo "$cmd"
- ;;
- esac
- ;;
- esac
- fi
- fi
- done
- return 0
- }
-
- #
- # For real ksh homeboy fanatics, redefine the `type' builtin with a ksh
- # version.
- #
- #type()
- #{
- # whence -v "$*"
- #}
-
- cd ()
- {
- case $# in
- 0) builtin cd "$HOME" ;;
- 1) builtin cd "$@" ;;
- 2) old="$1"
- new="$2"
- dir=$(echo "$PWD" | sed "s:$old:$new:g")
-
- case "$dir" in
- "$PWD") echo "bash: cd: bad substitution" >&2 ;;
- *) echo "$dir"
- builtin cd "$dir"
- ;;
- esac
- ;;
- *) echo "cd: wrong arg count" >&2 ;;
- esac
- }
-
- #
- # ksh print emulation
- #
- # print [-Rnprsu[n]] [arg ...]
- #
- # - end of options
- # -R BSD-style -- only accept -n, no escapes
- # -n do not add trailing newline
- # -p no-op (no coprocesses)
- # -r no escapes
- # -s no-op (print to the history file)
- # -u n redirect output to fd n
- #
-
- print()
- {
- local eflag=-e
- local nflag=
- local fd=1
-
- OPTIND=1
-
- while getopts "Rnprsu:" c; do
- case $c in
- R|r) eflag= ;;
- n) nflag=-n ;;
- u) redir=">&$OPTARG"
- fd=$OPTARG
- ;;
- p|s) ;;
- esac
- done
-
- shift $[ $OPTIND - 1 ]
- echo $eflag $nflag "$@" >&$fd
- }
-